# -*- coding: utf-8 -*-
# Created by liangfuting on 2020/7/14
# Copyright (c) 2020 liangfuting. All rights reserved.
#


class Pagination:
    def __init__(self,current_page,all_count,base_url,query_params,per_page=20,pager_page_count=11):
        """
        分页初始化
        :param current_page:当前页码
        :param all_count: 数据库中的总条目
        :param base_url: 基础url
        :param query_params: QueryDict对象，内部包含所有当前的URL的原条件
        :param per_page: 每页显示的数据条数
        :param pager_page_count: 页面上最多显示的页码数量
        """
        self.base_url = base_url
        try:
            self.current_page=int(current_page)
            if self.current_page <= 0:
                raise Exception()
        except Exception as e:
            self.current_page = 1
        self.query_params = query_params
        self.per_page = per_page
        self.all_count = all_count
        self.pager_page_count = pager_page_count
        pager_count,b=divmod(all_count,per_page)
        if b != 0:
            pager_count += 1
        self.pager_count = pager_count
        half_pager_page_count = int(pager_page_count /2)
        self.half_pager_page_count = half_pager_page_count

    @property
    def start(self):
        """
        数据获取取值开始
        :return:
        """
        return (self.current_page-1)*self.per_page

    @property
    def end(self):
        """
        数据获取取值结束索引
        :return:
        """
        return self.current_page*self.per_page

    def page_html(self):
        """
        生成html页码
        :return:
        """
        #如果显示的页面数小于11
        if self.pager_count < self.pager_page_count:
            pager_start = 1
            pager_end = self.pager_count
        else:
            # 如果总页数大于11
            # 判断：如果当前页面 小于 5
            if self.current_page <= self.half_pager_page_count:
                pager_start = 1
                pager_end = self.pager_page_count
            else:
                # 如果当前页面数+5>总页码
                if (self.current_page + self.half_pager_page_count) > self.pager_count:
                    pager_end = self.pager_count
                    pager_start = self.pager_count - self.pager_page_count + 1
                else:
                    pager_start = self.current_page - self.half_pager_page_count
                    pager_end = self.current_page + self.half_pager_page_count

        page_list = []
        if self.current_page <= 1:
            prev = "<li><a href='#'>上一页</a><li>"
        else:
            self.query_params['page']=self.current_page-1
            prev = "<li><a href='{}?{}'>上一页</a><li>".format(self.base_url,self.query_params.urlencode())
        page_list.append(prev)

        for i in range(pager_start,pager_end+1):
            self.query_params['page'] = i
            if self.current_page==i:
                tpl="<li class='active'><a href='{}?{}'>{}</a><li>".format(self.base_url,
                                                                           self.query_params.urlencode(), i)
            else:
                tpl="<li><a href='{}?{}'>{}</a><li>".format(self.base_url, self.query_params.urlencode(), i)
            page_list.append(tpl)

        if self.current_page >= self.pager_count:
            nex = "<li><a href='#'>下一页</a><li>"
        else:
            self.query_params['page'] = self.current_page + 1
            nex = "<li><a href='{}?{}'>下一页</a><li>".format(self.base_url, self.query_params.urlencode())
        page_list.append(nex)
        page_str = "".join(page_list)
        return page_str
